<?php

namespace app\admin\controller;

use app\admin\AdminCommon;
use think\Db;
use think\Request;


class Admin extends AdminCommon
{
    //管理员列表
    public function getIndex()
    {

        //查询得到数据库所有的数据
       $admin=\app\admin\model\Admin::all();
        $this->assign('data',$admin);
        return view('admin/index');
    }
    //显示创建管理员页面
    public function getAdd()
    {
        //
        return view('admin/create');
    }
    //保存管理员
    public function postDoadd(Request $request)
    {
        //先进行传输的数据的验证
        $validate=\validate('Admin');
        $vali = $validate->check(input('post.'));
        if (!$vali) {
            $this->error($validate->getError());
            exit;
        };
        $result=$request->except(['repassword','password','__token__','action']);
        //需要得到传递过来数据的验证
        $password=md5(input('post.password'));
        $result['password']=$password;
        $re=\app\admin\model\Admin::create($result);
        if($re){
            //返回数据，进行判断是否添加成功
            $data=[
                'status' => 1,
                'msg' => '添加成功',
            ];

        }else{
            $data=[
                'status' => 0,
                'msg' => '添加',
            ];
        };
        //必须是json数据的返回
        return json($data);
    }
    //显示编辑资源表单页
    public function getEdit($id)
    {
        $admin=new \app\admin\model\Admin();
        $data=$admin->where('id',$id)->select();
        $this->assign('data',$data);
        return view('admin/edit');
    }
    //保存更新管理员
    public function postDoedit(Request  $request,$id)
    {
        //进行传值的验证
        $validate=\validate('Admin');
        $va = $validate->check(input('post.'));
        if (!$va) {
            $this->error($validate->getError());
            exit;
        };
        //当password为空时，表示未修改密码
        if(empty(input('post.password'))){
            $result=$request->except(['repassword','password','__token__','oldpassword','action']);
            $result['password']=input('post.oldpassword');
            $admin=new \app\admin\model\Admin();
            $re=$admin->save($result,['id' => $id]);
            if($re){
                //返回数据，进行判断是否添加成功
                $data=[
                    'status' => 1,
                    'msg' => '更新成功',
                ];
            }else{
                $data=[
                    'status' => 0,
                    'msg' => '更新失败',
                ];
            };
            return json($data);
        }else{
            //如果输入了新的密码，就表示更新密码
            $result=$request->except(['repassword','password','__token__','oldpassword']);
            //需要得到传递过来数据的验证
            $password=md5(input('post.password'));
            $result['password']=$password;
            $admin=new \app\admin\model\Admin();
            $re=$admin->save($result,['id' => $id]);
            if($re){
                //返回数据，进行判断是否添加成功
                $data=[
                    'status' => 1,
                    'msg' => '更新成功',
                ];
            }else{
                $data=[
                    'status' => 0,
                    'msg' => '更新失败',
                ];
            };
            return json($data);
        }
    }
    //分配角色页面
    public function getRoles($id){
        //得到用户信息
        $name=new \app\admin\model\Admin();
        $info=$name->where('id',$id)->select();
        $this->assign('info',$info);
        //得到管理员和角色直接的联系信息
        $data=Db::name('admin_role')->where('uid',$id)->select();
        $rids[]='';
        foreach ($data as $v){
            $rids[]=$v['rid'];
        }
        $this->assign('rids',$rids);
        //所有的角色名字
        $roles=new \app\admin\model\Roles();
        $role=$roles->select();
        $this->assign('role',$role);
        return $this->fetch('admin/roles');
        /*$data=Db::name('admin')
            ->alias('a')
            ->join('admin_role ar','a.id=ar.uid')
            ->join('role r','ar.rid=r.id')
            ->where('a.id',$id)
            ->field('a.id,r.name')
            ->select();
        print_r($data);
        exit;*/

    }
    //分别角色保存
    public function postRoles(Request $request){
        $res=($request->except(['__token__','action','id']));
        $uid=$res['uid'];
        $rid=$res['rid'];
        Db::startTrans();
        try{
            //先删除所有UID为$uid的元素
            Db::name('admin_role')->where('uid',$uid)->delete();
            foreach ($rid as $key=>$v){
                $role['uid']=$uid;
                $role['rid']=$v;
                //进行数据的输入
                Db::name('admin_role')->insert($role);
            }
            // 提交事务
            Db::commit();
            $data=[
                'status'=>0,
                'msg'=>'角色分配成功',
            ];
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            $data=[
                'status'=>1,
                'msg'=>'角色分配失败',
            ];
        }

        return json($data);



    }
    //状态的停用
    public function postStop($id)
    {
        //
        $admin=new \app\admin\model\Admin();
        $result=$admin->save([
            'status'  => '1',
        ],['id' => $id]);
        if($result){
            $data=
                [
                    'status'=>0,
                    'msg'=>'已停用',
                    'id'=>$id,
                ];
        }else{
            $data=
                [
                    'status'=>1,
                    'msg'=>'出现未知错误，请稍后重试',
                    'id'=>$id,
                ];
        }
        return json($data);
    }
    //状态的启用
    public function postStart($id)
    {
        //
        $admin=new \app\admin\model\Admin();
        $result=$admin->save([
            'status'  => '0',
        ],['id' => $id]);
        if($result){
            $data=
                [
                    'status'=>0,
                    'msg'=>'已启用',
                    'id'=>$id,
                ];
        }else{
            $data=
                [
                    'status'=>1,
                    'msg'=>'出现未知错误，请稍后重试',
                    'id'=>$id,
                ];
        }
        return json($data);
    }
    //删除管理员
    public function postDelete($id)
    {

        $re=\app\admin\model\Admin::destroy($id);
        if($re){
            //返回数据，进行判断是否添加成功
            $data=[
                'status' => 1,
                'msg' => '删除成功',
            ];
        }else{
            $data=[
                'status' => 0,
                'msg' => '删除失败',
            ];
        };
        return json($data);

    }
}
